导弹拦截 |
您所在的位置:网站首页 › 导弹拦截 noip › 导弹拦截 |
导弹拦截
时空限制 1s / 65MB 题目描述 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭。由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹。 输入导弹依次飞来的高度(雷达给出的高度数据是不大于30000的正整数),计算这套系统最多能拦截多少导弹,如果要拦截所有导弹最少要配备多少套这种导弹拦截系统。 输入输出格式 输入格式: 一行,若干个正整数最多100个。 输出格式: 2行,每行一个整数,第一个数字表示这套系统最多能拦截多少导弹,第二个数字表示如果要拦截所有导弹最少要配备多少套这种导弹拦截系统。 输入输出样例 输入样例#1: 389 207 155 300 299 170 158 65 输出样例#1: 6 2 思路这个导弹拦截题是专门求导弹需要多少套的那一种,用到了动态规划,第一问求最长不上升子序列,和最经典的导弹拦截一样。然后(蒟蒻做法)不断的做剩余的最长不上升子序列,一直到所有导弹都经历过为止。 代码 (c++) #include #include #include #include using namespace std; int i=1,j,m,n,a[101],ans,f[101],ma,maxx,pre[101]; void clean(int x) { if(pre[x]) clean(pre[x]); a[x]=0; return; } int main() { while(scanf("%d",&a[i])!=EOF) i++; n=i-1; int kg=n,tim=0; while(kg) { kg=n; memset(pre,0,sizeof(pre)); for(i=1; i |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |